"""
@name : 回合制对战游戏
@author : zhaosiyuan
@projectname: PythonProject
@time: 2022/7/7
"""
# 类：角色  房间
# 角色：实例属性  行为：战斗
# 房间：名字 成员  行为：加入房间
# 选择 ：创建房间  加入房间

# 角色
import random
class Role():
    def __init__(self, name, sex, blood=100, equipment=None):
        self.name = name
        self.sex = sex
        self.blood = blood
        self.equipment = equipment
        self.room = None  #刚开始没有加入房间

    # 战斗
    def battle(self, other):
        # 两个人物在同一个房间
        if self.room == other.room:
            # 确保不是同一个人
            if self != other:
                # 此种循环方式一直循环，难以解决
                # print(self.blood, other.blood)
                # while True:
                # #     go_on = input("输入q退出游戏，其他退出游戏")
                # #     if go_on == 'q':
                # #         print("您已退出游戏")
                # #         break
                #     for i in range(1, 4):
                #         print(f"现在是第{i}局")
                #         print('*'*25)
                #         while self.blood > 0 and other.blood > 0:
                #             #如果有防弹衣就血量-5,没有则减10
                #             lost_blood = 5 if other.equipment else 10
                #             other.blood -= lost_blood
                #             print(f"{self.name}攻击了{other.name}{lost_blood}点血"
                #                   f"\n{self.name}当前血量{self.blood}\n{other.name}当前血量{other.blood}")
                #             if self.blood <= 0:
                #                 print(f"{other.name}击败了{self.name}")
                #                 break
                #
                #             elif other.blood <= 0:
                #                 print(f"{self.name}击败了{other.name}")
                #                 break
                #         else:
                #             print("血量不足无法战斗")
                if self.blood <= 0:
                    print("您的血量低于0，不可以参与战斗")
                else:
                    lost_blood = 5 if other.equipment else 10
                    other.blood -= lost_blood
                    print(f"{self.name}攻击了{other.name}{lost_blood}点血"
                          f"\n{self.name}当前血量{self.blood}\n{other.name}当前血量{other.blood}")
                    if other.blood <= 0:
                        print(f"{other.name}已阵亡")
                        exit()
            else:
                print("不能自己攻击自己！别蠢！")
        else:
            print("人物不在同一个房间，无法战斗")


# 房间
class Room():
    # 房间名字以及成员
    def __init__(self, name):
        self.name = name
        self.member = []

    # 加入房间
    def join(self,role):
        # 在角色里定义的属性room
        if role.room == None:
            if len(self.member) < 2:
                self.member.append(role)
                # 房间人数小于两人，定义此角色加入某个房间
                role.room = self.name
            else:
                print("此房间已经满员")
        else:
            print("此人物已经加入房间！")

role_dict = {} # 存放初始化角色实例  存放名字和对象的关系
room_dict = {} # 存放初始化房间实例
while True:
    print("请选择：1、创建角色\n 2、创建房间\n 3、加入房间\n 4、开始战斗\n 5、退出战斗")
    options = int(input("请输入您的选择："))
    if options == 1:
        name, sex = input("请输入您要创建的角色名以及性别(用空格隔开）：").split()
        # 创建实例，存入角色字典里
        role_dict[name] = Role(name, sex)
        wear_equipment = input("请选择是否购买防弹衣（yes 或者 no）")
        if wear_equipment == 'yes':
            role_dict[name].equipment = 1
    elif options == 2:
        name = input("请输入您要创建的房间名：")
        # 创建好的实例化对象保存在字典里
        room_dict[name] = Room(name)
    elif options == 3:
        # 打印出当前已有的角色与房间
        print(f'当前已创建好的角色:{list(role_dict.keys())}')
        print(f'当前已创建好的房间:{list(room_dict.keys())}')
        role_name, room_name = input("请输入要加入房间的角色与房间名（空格隔开）：").split()
        if 'quit' in role_name and room_name:
            continue
        else:    # 调用Room的join方法将角色加入房间
            room_dict[room_name].join(role_dict[role_name])
    elif options == 4:
        print(f"当前有房间{room_dict.keys()}")
        room_name = input("请输入要选择的房间：")
        # 判定当前房间是否有两人
        if len(room_dict[room_name].member) == 2:
            while True:
                enter = random.choice([0, 1])
                # 两人对打
                if enter == 0:
                    room_dict[room_name].member[0].battle(room_dict[room_name].member[1])
                else:
                    room_dict[room_name].member[1].battle(room_dict[room_name].member[0])
        else:
            print("当前房间不足两人，不可开战")
    elif options == 5:
        print("退出游戏")
        break







# role1 = Role('guanyunchang', 'male', 100, 'changmao')